package com.btl.service.ai.support.rag.embedding.strategy;

import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentSplitter;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.IngestionResult;

import java.util.List;

/**
 * EmbeddingStoreIngestorStrategy
 */
public interface EmbeddingStoreIngestorStrategy {

    /**
     * 获取EmbeddingModel
     *
     * @return EmbeddingModel
     */
    EmbeddingModel embeddingModel();

    /**
     * 获取向量存储
     *
     * @return EmbeddingStore<TextSegment>
     */
    EmbeddingStore<TextSegment> embeddingStore(String collectionName);

    /**
     * 执行嵌入
     *
     * @param collectionName   集合名称
     * @param documents        文本列表
     * @param documentSplitter 文档分割器
     * @return 嵌入向量
     */
    IngestionResult embed(String collectionName, DocumentSplitter documentSplitter, List<Document> documents);

    /**
     * 执行嵌入
     *
     * @param collectionName 集合名称
     * @param documents      文本列表
     * @return 嵌入向量
     */
    IngestionResult embed(String collectionName, List<Document> documents);

    /**
     * 获取模型
     *
     * @return 模型
     */
    EmbeddingModelTypeEnum modelType();
}
